home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / cd_lib / src / cdr_mpha.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-08  |  1.7 KB  |  73 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dos.h>
  4. #include "define.h"
  5. /* #include <cdrfrb.h> */
  6.  
  7. #ifdef DEBUG
  8. main(int argc, char *argv[])
  9. {
  10.     struct TIMEADRS time, time2;
  11.     int status, no;
  12.     
  13.     printf("return is %x\n", cdr_mphase(0, &status, &no, &time, &time2));
  14.     if (status) {
  15.         printf("現在 %d曲目を演奏中\n", no);
  16.     }
  17.     printf("track %d分 %d秒 %dフレーム\n", time.min, time.sec, time.frame);
  18.     printf("disk  %d分 %d秒 %dフレーム\n", time2.min, time2.sec, time2.frame);
  19.  
  20. }
  21. #endif
  22.  
  23. /* 音楽演奏状態の読み取り(時間指定) */
  24. /*
  25.  * decice_no:   device number (Towns CD-ROM -> 0)
  26.  * status: 演奏状態 1 -> 演奏中
  27.  * music_num: 現在演奏中の曲番号
  28.  * track_time: トラック内演奏時間
  29.  * disk_time: ディスク内演奏時間
  30.  * return: 0 -> 正常終了, 0以外 -> エラー
  31.  */
  32. int cdr_mphase(int device_no, int *status, int *music_num, struct TIMEADRS *track_time, struct TIMEADRS *disk_time)
  33. {
  34.     union REGS reg;
  35.     struct SREGS seg;
  36.     char buf[10];
  37.     
  38.     reg.h.ah = 0x53;
  39.     reg.h.al = (0xC0 | (u_char) device_no);
  40.     reg.x.cx = 0x0000;
  41.  
  42.     reg.x.di = (u_int) buf;
  43.     segread(&seg);
  44.     seg.ds = seg.ss;
  45.  
  46.     int86x(0x93, ®, ®, &seg);
  47.     
  48.     if (status) {
  49.         *status = (u_int) reg.h.al;
  50.     }
  51.     if (music_num) {
  52.         *music_num = (u_int) buf[1];
  53.     }
  54.     if (track_time) {
  55.         track_time->min = buf[3];    /* 分 */
  56.         track_time->sec = buf[4];    /* 秒 */
  57.         track_time->frame = buf[5];    /* フレーム */
  58.     }
  59.     if (disk_time) {
  60.         disk_time->min = buf[7];    /* 分 */
  61.         disk_time->sec = buf[8];    /* 秒 */
  62.         disk_time->frame =buf[9];    /* フレーム */
  63.     }
  64.     if (reg.h.ah == 0) {
  65.         return 0;
  66.     } else if (reg.h.ah == 0x02) {  /* device number error */
  67.         return DEVERR;
  68.     } else {                        /* (reg.h.ah == 0x80) hard ware error */
  69.         return reg.x.cx;
  70.     }
  71. }
  72.  
  73.